/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.tbp.model.domain.financeiro;

import java.math.BigDecimal;

/**
 *
 * @author Diego Freire
 */
public class Moeda {

    private BigDecimal valor = null;

    public Moeda(BigDecimal v) {
        this.valor = v;
    }

    public Moeda(String v) {
        this.valor = new BigDecimal(v);
    }

    public Moeda(double valor) {
        this.valor = new BigDecimal(valor);
    }

    public BigDecimal getValor() {
        return valor;
    }

    public Moeda somarCom(Moeda outra) {
        return new Moeda(this.valor.add(outra.getValor()));
    }

    public Moeda subtrair(Moeda outra) {
        return new Moeda(this.valor.subtract(outra.getValor()));
    }

    public Moeda multiplicar(Moeda outra) {
        return new Moeda(this.valor.multiply(outra.getValor()));
    }

    public Moeda dividir(Moeda outra) {
        return new Moeda(this.valor.divide(outra.getValor()));
    }

    public Moeda dividir(Moeda outra, int roudingMode) {
        return new Moeda(this.valor.divide(outra.getValor(), roudingMode));
    }

    public boolean menor(Moeda outra) {
        double v1 = this.valor.doubleValue();
        double v2 = outra.getValor().doubleValue();
        if (v1 < v2) {
            return true;
        }
        return false;
    }

    @Override
    public String toString() {
        valor = valor.setScale(2, BigDecimal.ROUND_HALF_UP);
        return valor.toPlainString();
    }

    @Override
    public int hashCode() {
        final int PRIME = 31;
        int result = 1;
        int v = valor.intValue();
        result = PRIME * result + (int) (v ^ (v >>> 31));
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (!(obj instanceof Moeda)) {
            return true;
        }

        Moeda outra = (Moeda) obj;

        return outra.getValor() == this.getValor();
    }
}
